var childframe={
	defaultDialogId : "dk_top_dialog_default",
	defaultShowToggle : false,
	openedDialogs : {},
	minDialogs : [],
	thisDoc : this,
	/**打开一个子窗口（以顶层窗口为父窗口，从顶层窗口中打开一个子窗口）
	 * @param options
	 * {
	 *  title 子窗口标题
	 *  url 子窗口url
	 *  dialogId 子窗口的id
	 *  height 子窗口高度
	 *  width 子窗口宽度
	 *  iframeName 子窗口的iframe的name
	 *  isHidden 子窗口是否隐藏
	 *  isModal
	 *  position 子窗口的位置，可以为null { left: left, top: top }
	 *  buttons
	 * }
	 */
	openDialog:function(options){
		if(!options)return;
		var selfFrameId = this.getSelfFrameId();
		options.parentFrameId = selfFrameId;
		if(window.top.mainframe){
			return window.top.mainframe.openDialog(options);
		}else{
			return this.openDialogSelf(options);
		}
	},
	/** 打开一个子窗口（以顶层窗口为父窗口，从顶层窗口中打开一个子窗口）
	 * @param title 子窗口标题
	 * @param url 子窗口url
	 * @param dialogId 子窗口的id
	 * @param height 子窗口高度
	 * @param width 子窗口宽度
	 * @param iframeName 子窗口的iframe的name
	 * @param isHidden 子窗口是否隐藏
	 * @param isModal
	 * @param position 子窗口的位置，可以为null { left: left, top: top }
	 * @param buttons
	 * @returns
	 */
	openChildDialog : function (title, url, dialogId, width, height,iframeName,isHidden,buttons,isModal,position) {
		var options = {};
		options.title = title;
		options.url = url;
		options.dialogId = dialogId;
		options.width = width;
		options.height = height;
		options.iframeName = iframeName;
		options.isHidden = isHidden;
		options.buttons = buttons;
		options.modal = isModal;
		if(position){
		  if(position.left || position.left === 0) options.left = position.left;
		  if(position.top || position.top === 0) options.top = position.top;
		}
		return this.openDialog(options);
	},
		/**
		 * 以自身为父窗口，打开一个子窗口
		 * @param parentFrameId 执行本函数的元素所在IFrame的id，在childframe中通过getSelfFrameId()获取
		 * @param dialogId 新弹出窗口的id
		 * @param title 弹出窗口的标题
		 * @param url
		 * @param height
		 * @param width
		 * @param iframeName 新弹出窗口iframe的name
		 * @param isHidden
		 * @param isModal true|false
		 * @param position { left: left, top: top }
		 * @param buttons
		 * @returns
		 */
		openDialogSelf : function(options){
		var that = this;
			if(!options)return;
			//return this.openChildDialog(options.parentFrameId, options.dialogId, options.title, options.url,
			//		options.width, options.height, options.iframeName,options.isHidden,
			//		options.isModal,options.position,options.button);
		var dialogId = options.id || options.dialogId || this.defaultDialogId;

		var dialog = dkDialog.get(dialogId);
			if (dialog) {
		  dialog.close();//如果窗口已经存在，则先关闭窗口
		}


		var dialog = dkDialog.openDialog(options);

		that.openedDialogs[dialogId] = dialog;

		var parentFrameId = options.parentFrameId;
		var dialogFrameId = "layui-layer-iframe"+ dialog.layerId;
	  	$("#"+dialogFrameId).attr("parentFrameId", parentFrameId);//add by wanghua 重要，不能删除。用来实现弹出窗口和父窗口两个iframe之间的函数调用

		dialog.bind('onClosed',function(){
			debugger;
			delete that.openedDialogs[dialogId];
			if(that.minDialogs[dialogId]&&top.mapFrame){
				var minDialogList=top.mapFrame.document.getElementById("minDialogList");
				$("#"+dialogId,$(minDialogList)).remove();
				delete that.minDialogs[dialogId];
			}
		});

		//最小化
		dialog.bind('onMinized',function (){
			that.minDialog(dialogId);
	  	});

		if(dialogId=='helpLocation'){
			$("#helpLocation").css("z-index", "9300").attr("resetzindex",false);
		}

		return dialog;
	},

	getSelfFrameId : function (){
		var selfFrame = this.getSelfFrame()||{};
		if(!selfFrame){
			throw new Exception("没有给页面设置一个唯一的pageUUID");
		}else if(!selfFrame.id){
			console.log("没有给iframe设置一个唯一的id和name："+selfFrame.src);
		}else return selfFrame.id;
	},

	getSelfFrame : function (rootDoc){
		var thisDoc = $(window);
		var iframes=$("iframe",rootDoc||parent.window.document);
		var selfFrame=window.frameElement||null;
		for(var i=iframes.length-1;i>-1&&!selfFrame;i--){
			var iframe=iframes[i];
			if(iframe.src.indexOf(window.location.hostname)==-1){//监测是否跨域
				;
			}else if(thisDoc.pageUUID && thisDoc.pageUUID == iframe.contentWindow.pageUUID){
				selfFrame=iframe;
			}else if(iframe.id&&iframe.contentDocument){ //iframe 下面可以再嵌入一层iframe
				selfFrame=this.getSelfFrame(iframe.contentDocument);
			}
		}
		if(selfFrame==null)
			selfFrame="";
		return selfFrame;
	},

	getParentFrameId:function(){
		return $(this.getSelfFrame()).attr("parentFrameId");
	},

	getFrameByFrameId : function(frameId,rootDoc){//根据frameId检索iframe
		if(!frameId)return null;
		var iframes=$("iframe",rootDoc||window.top.document);
		var findedFrame=null;
		for(var i = iframes.length-1; i > -1 && !findedFrame; i--){
			var iframe=iframes[i];
			if(iframe.src.indexOf(window.location.hostname)==-1){//检测是否跨域
				;
			}else if(iframe.id==frameId){
				findedFrame=iframe;
			}else if( iframe.id && iframe.contentDocument){ //iframe 下面可以再嵌入一层iframe
				findedFrame = this.getFrameByFrameId(frameId, iframe.contentDocument);
			}
		}
		return findedFrame;
	},
	/**
	 * 执行父窗口页面内的函数
	 * @param funcName 函数名
	 * @param args 函数参数，数组类型
	 */
	invokeParentFunction : function(funcName, args){
		var parentFrameId = $(this.getSelfFrame()).attr("parentFrameId");
		this.invokeFunctionByIframeId(parentFrameId,funcName,args);
	},
	/**
	 * 执行指定窗口页面内的函数
	 * @param frameId 指定窗口的id
	 * @param funcName 函数名
	 * @param args 参数，数组类型
	 */
	invokeFunctionByIframeId : function(frameId, funcName, args){
		var parent=this.getFrameByFrameId(frameId);
		if(parent){
			parent.contentWindow.childframe.invoke(funcName,args);
		}else if(typeof top.window[funcName]=="function"){
			top.window[funcName].apply(top.window,args);
		}else if(args&&typeof args[0]=="string"){
			alert(args[0]);
		}else{
			return false;
		}
	},
	/**
	 * 执行父窗口页面内的函数
	 * @param funcName 函数名
	 * @param args 函数参数，数组类型
	 */
	invokeParentFunctionX : function(funcName, args){
		var selfFrameId = this.getSelfFrameId();
		if(selfFrameId){
			//alert("selfFrameId:"+selfFrameId);
			var selfFrame = top.window.frames[selfFrameId];
			//var parentFrameId = selfFrame.attributes["parentFrameId"];
			var parentFrameId = $("#"+selfFrameId,top.document.body).attr("parentFrameId") ;
			//alert("parentFrameId:"+parentFrameId);
			if(parentFrameId && parentFrameId.length>0){
				var findParent = false;
				var parentFrame = $("iframe[name='"+parentFrameId+"']",top.document.body);//$("#"+parentFrameId,top.document.body);
				if(parentFrame){
					for(var i=0;i<parentFrame.length;++i){
						var element = parentFrame[i];
						if(element.tagName.toLowerCase() == 'iframe'){
							if(element.contentWindow.childframe){
								element.contentWindow.childframe.invoke(funcName,args);
								findParent = true;
								break;
							}
						}
					}
				}
				if(!findParent){ //父iframe可能嵌套属于某个iframe
					var grandpaFrame = $("iframe",top.document.body);//$("#"+parentFrameId,top.document.body);
					if(grandpaFrame){
						for(var i=0;i<grandpaFrame.length;++i){
							var element = grandpaFrame[i];
							if(element.tagName.toLowerCase() == 'iframe'){
								var parentFrame = $("iframe[name='"+parentFrameId+"']",element.contentWindow.document.body);//$("#"+parentFrameId,top.document.body);
								if(parentFrame){
									for(var j=0;j<parentFrame.length;++j){
										var element2 = parentFrame[j];
										if(element2.tagName.toLowerCase() == 'iframe'){
											if(element2.contentWindow.childframe){
												element2.contentWindow.childframe.invoke(funcName,args);
												findParent = true;
												break;
											}
										}
									}
								}
							}
						}
					}
				}
			}else{
				parent.childframe.invoke(funcName,args);
			}
		}else{
			parent.childframe.invoke(funcName,args);
		}
	},
	/**
	 * 执行指定窗口页面内的函数
	 * @param frameId 指定窗口的id
	 * @param funcName 函数名
	 * @param args 参数，数组类型
	 */
	invokeParentFunctionById : function(frameId, funcName, args){
		var selfFrameId = this.getSelfFrameId();
		var selfFrame = top.window.frames[selfFrameId];
		var parentFrameId = frameId;
		if(parentFrameId && parentFrameId.length>0){
			var parentFrame = $("#"+parentFrameId,top.document.body);
			if(parentFrame){
				//parentFrame[1].contentWindow.invoke(funcName,args);
				for(var i=0;i<parentFrame.length;++i){
					var element = parentFrame[i];
					if(element.tagName.toLowerCase() == 'iframe'){
						if(typeof(element.contentWindow.invoke)=="function"){
							element.contentWindow.childframe.invoke(funcName,args);
							break;
						}
					}
				}
			}
		}else{
			parent.childframe.invoke(funcName,args);
		}
	},
	/**
	 * 执行本窗口页面内的函数
	 * @param funcName 函数名
	 * @param args 参数，数组类型
	 */
	invoke : function(funcName, args){
		var func = eval(funcName);
		if(!args) args = [];
		func.apply(this,args);
	},

	deCodeUrlParam:function(funcUrl){
		if(funcUrl.indexOf(":")==-1){
			funcUrl=(window.basePath||"")+funcUrl;
		}
		var param = "";
		var spIdx = funcUrl.indexOf('?');
		if(spIdx>0&&spIdx<funcUrl.length-2){
			var paramArr = funcUrl.substring(spIdx+1).split('&');
			param={url:funcUrl.substring(0,spIdx)};
			for(var i=0,len=paramArr.length;i<len;i++){
				var kv = paramArr[i].split('=');
				if(kv.length==2){
					param[kv[0]] = kv[1];
				}
			}
		}else{
			param={url:funcUrl};
		}
		return param;
	}
};
